A virtual machine (VM) provides an environment in which an operating system (OS) may execute with apparent control of a dedicated physical machine. Multiple VMs may execute on a common hardware machine, and each VM may operate with protection and isolation from other VMs executing on the common hardware machine. Each VM typically encapsulates a complete executing state for a corresponding OS, including both user-level applications and kernel-mode OS services.
A VM may execute an instance of a conventional desktop environment commonly found on a desktop computer. A virtual desktop infrastructure (VDI) system is a system of VMs specifically configured to execute instances of a desktop environment on the common hardware machine. A client device may access a specific instance of the desktop environment within the VDI system via a network connection to the common hardware machine. The client device is then able to present the desktop environment to a user from any location with appropriate network access.
Each instance of the desktop environment comprises a desktop OS and related applications. The desktop OS and applications reside in a mass storage volume associated with the instance. Each instance is associated with a unique mass storage volume that provides a private storage space similar to that provided by a hard disk attached to a desktop computer. The mass storage volume may be derived from a shared, read-only “base disk” and a unique set of difference blocks associated with the mass storage volume.
The mass storage volumes of different instances of the desktop environment reside on a mass storage device. The mass storage device is conventionally implemented using one or more magnetic hard disk drives. However, any form of mass storage media may be used. For example, in modern computer systems, the mass storage media may comprise a solid-state drive (SSD) or an array of SSDs.
When a plurality of desktop environments is started by the VDI system, each desktop environment individually boots a respective instance of the OS on an apparently private hardware machine, provided by an associated VM. In actuality, however, the common hardware machine is performing all necessary steps and instructions to boot each of the plurality of desktop environments. A “boot storm” refers to a sharp and sometime crippling rise in resource utilization with respect to the common hardware machine that occurs when the plurality of desktop environments attempt to simultaneously boot within their respective VMs. The boot storm is typically characterized by a sharp rise in input/output (I/O) requests, disk access requests, and memory allocation requests. When each desktop environment boots, a specific set of commonly used disk blocks is read from the mass storage device into system memory within the common hardware machine. Many of the commonly used disk blocks are data segments of the OS. In a conventional VDI system, each disk block may be read from the mass storage device and then stored in physical memory pages of the system memory on the common hardware machine. Each physical memory page is then privately mapped to a VM that requested the disk block. As a result, duplicate copies of each commonly used block may be requested from the mass storage system and stored redundantly in system memory, leading to I/O and storage inefficiencies.
For example, in a conventional VDI system, if N instances of the desktop environment are booted on the common hardware machine, then N copies of each block from the set of commonly used blocks are separately requested from the mass storage system and initially stored as N separate copies within the system memory. Similarly, if M different users launch a particular common application from their respective virtual desktop environment, then M separate requests for each block used by the application are separately transmitted to the mass storage system and related data is stored in M separate blocks in system memory. In the boot storm scenario, as well as the common application launch scenario, significant memory and I/O capacity is utilized to support multiple VMs booting and executing multiple instances of the desktop environment. Unfortunately, much of this memory and I/O capacity is utilized redundantly, and therefore limits advantages otherwise gained by a VDI systems architecture.
Therefore, what is needed in the art is a technique for reducing system resource utilization in VDI and other similar systems.